package com.hnust;

import com.cleveroom.container.BufferType;
import com.cleveroom.core.CRMDevice;
import com.cleveroom.core.KLWCommunicater;
import com.cleveroom.exception.CleveroomConnException;
import com.cleveroom.interfaces.IDeviceListner;
import com.cleveroom.utils.Tools;

public class CRMCoreTest {
    public static void main(String[] args) {
        //网络连接的ip和端口号
        final KLWCommunicater cm = new KLWCommunicater("192.168.1.178", 4001);
//        cm.addSpeakerbufferListener("_speaker_buffer_", new IDeviceListner() {
//            @Override
//            public void onDeviceChange(CRMDevice dev, BufferType bufferType) {
//                System.out.println("来了一条新的消息");
//            }
//
//            @Override
//            public void onAddNewDe vice(CRMDevice dev, BufferType bufferType) {
//
//            }
//        });

        cm.addSensorListener("_sensor_buffer_", new IDeviceListner() {
            @Override
            public void onDeviceChange(CRMDevice dev, BufferType bufferType) {
                System.out.println("更新一条新的消息\t" + bufferType +dev.toString());
            }
            @Override
            public void onAddNewDevice(CRMDevice dev, BufferType bufferType) {
                System.out.println("新增一条新的消息\t" + bufferType+dev.toString());
            }
        });

        /**
         * 设备回调函数
         */
        cm.addDeviceListener("_add_device_listener_", new IDeviceListner() {
            //dev --指令，bufferType --类型
            @Override
            public void onDeviceChange(CRMDevice dev, BufferType bufferType) {
                System.err.println("device update:" + dev + "   " + bufferType);
                switch (bufferType){
                    case DEVICEBUFFER:{
                        //设备
                        if(dev.getD2() == 199 ){
                            //208是射灯
                            if(dev.getD5() == 4){
                                System.out.println("设备状态更新:" + dev);
                                byte[] bytes = Tools.byte2bit(dev.getD7());
                                if (bytes[0] == 1) {
                                    System.out.println(dev.getUid()+" 状态变为:\t\033[32;4m开\033[0m");
                                }else {
                                    System.out.println(dev.getUid()+" 状态变为:\t\033[31;4m关\033[0m");
                                }
                            }
                        }
                        break;
                    }
                }
            }
            @Override
            public void onAddNewDevice(CRMDevice dev, BufferType bufferType) {
                System.err.println("device add:" + dev + "   " + bufferType);
                switch (bufferType){
                    case DEVICEBUFFER:{
                        //设备
                        if(dev.getD2() == 199 ){
                            //208是射灯
                            if(dev.getD5() == 208){
                                System.out.println("找到设备:" + dev);
                                byte[] bytes = Tools.byte2bit(dev.getD7());
                                if (bytes[0] == 1) {
                                    System.out.println(dev.getUid()+" 状态变为:\t\033[32;4m开\033[0m");
                                }else {
                                    System.out.println(dev.getUid()+" 状态变为:\t\033[31;4m关\033[0m");
                                }
                            }
                        }
                        break;
                    }
                }
            }
        });


        /**
         * 情景变化回调函数
         */
//        cm.addSceneListener("_add_scene_listener_", new IDeviceListner() {
//            @Override
//            public void onDeviceChange(CRMDevice dev, BufferType bufferType) {
//                System.err.println("scene update:" + dev + "   " + bufferType);
//            }
//
//            @Override
//            public void onAddNewDevice(CRMDevice dev, BufferType bufferType) {
//                System.err.println("scene add:" + dev);
//            }
//        });


        /**
         * 连接回调函数，暂时不用
         */
//        cm.setConnectListener(new IConnectListener() {
//            @Override
//            public void onStatusChange(boolean status) {
//                System.err.println("网络发生变化:"+(status?"上线":"离线"));
//                if(status){
//                    //查询系统所有设备状态、安防信息、全局情景指令，发送如下指令可以查询系统中设备状态、安防信息、全局情景设置情况，本指令建议刚连接系统时发送，终端可将系统数据存入后台运行设备列表
//                    cm.asynSend(new Instruction(243, 166, 255, 0, 0, 0, 0));
//                }
//            }
//        });

        try {
            cm.setGwkey("1234");
            //建立连接
            if (cm.connect()) {
                //开启工程
                cm.startEngine();
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //System.out.println(cm.getDeviceBuffer().getDeviceList());
                //System.out.println(cm.getSensorbuffer().getDeviceList());
                //网关密码，暂时不用
                //查询系统所有设备状态、安防信息、全局情景指令，发送如下指令可以查询系统中设备状态、安防信息、全局情景设置情况，
                // 本指令建议刚连接系统时发送，终端可将系统数据存入后台运行设备列表
                //cm.asynSend(new Instruction(243, 166, 255, 0, 0, 0, 0));
                //查询系统中所有传感器的状态指令
                //cm.asynSend(new Instruction(243, 168, 0, 0, 0, 0, 0));

                //开启空调设备指令,开启之后不能马上关闭
                //cm.asynSend(new Instruction(243, 154, 255, 255, 4, 0, 0));
                //关闭空调设备指令
                //cm.asynSend(new Instruction(243, 158, 255, 255, 4, 0, 0));

                //登陆验证，暂时不用
//                cm.login(new ICRMInstructionCallBack() {
//
//                    @Override
//                    public void onTimeOut() {
//                        System.out.println("登录超时");
//                    }
//
//                    @Override
//                    public void onSuccess() {
//                        System.out.println("登录成功");
//                        cm.asynSend(new Instruction(243, 166, 255, 0, 0, 0, 0));
//                    }
//
//                    @Override
//                    public void onFail() {
//                        System.out.println("登录失败，网关密码错误");
//                    }
//                });
            } else {
                System.out.println("连接异常");
                cm.release();
            }
        } catch (CleveroomConnException e) {
            e.printStackTrace();
            System.out.println("连接异常");
            cm.release();
        } finally {
            //断开连接
        }
    }

}
